static void Method(Point p = default)
{
}
Ключевое слово default разрешает разрабу пользоваться переменной без явной инициализации, таким образом, если тип значимый, то все поля с 0, а если ссылочный то вся переменная null.
В C# можно передать неопределенное число аргументов одного типа
static int Add(params int[] values){
...
}
Add(1, 2, 5, 6)
При передаче переменного количества аргументов фактически генеррируется код инициализации массива и передаче массива.
Данная функция не рекомендуется к частому использованию поскольку она требует инициализации массива перед вызовом функции, это трата времени и памяти.
По этой причине стоит сделать несолько перегрузок которые будут поддерживать например 1-3 параметра, а потом уже писать перегрузку с params.
Хорошей практикой считается принимать наиболее общий, слабый тип, так, считается что лучше принимать параметром IEnumerable чем List. При этом считается хорошей практикой возвращать наиболее сильный тип (Но тоже нельзя перебарщивать). Так, лучше вернуть IList чем просто IEnumerable, чтобы те кто будут вызывать делали наименьшее число преобразований типов.